package entity.Encomienda;

import java.util.Date;
import java.util.List;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import dto.Encomienda.DTO_Encomienda;
import entity.Administracion.Entity_Destino;
import entity.Administracion.Entity_Sucursal;
import entity.Cliente.Entity_FacturaCliente;
import entity.Proveedor.Entity_Proveedor;

@Entity
@Table(name="Encomienda")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name="tipo",
	discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="EN")

public class Entity_Encomienda {
	@Id
	@GeneratedValue (strategy = GenerationType.AUTO)
	private Integer id;
	@ManyToOne
	@JoinColumn(name="idSucursalOrigen")
	private Entity_Sucursal sucursalOrigen;
	@ManyToOne
	@JoinColumn(name="idDestino")
	private Entity_Destino destino;
	@ManyToOne
	@JoinColumn(name="idSucursalActual")
	private Entity_Sucursal sucursalActual;
	private Date fechaRecepcion;
	private Date fechaMaxima;
	private String estado;
	@ManyToOne
	@JoinColumn(name="idAseguradora")
	private Entity_Proveedor aseguradora;
	private float largo;
	private float alto;
	private float ancho;
	private float peso;
	private float volumen;
	private String tratamiento;
	private boolean apilable;
	private int cantApilable;
	private boolean refrigerado;
	private String condicionTransporte;
	private String indicacionesManipulacion;
	private String fragilidad;
	private boolean tercerizado;
	private float kilometrosRecorridos;
	private boolean facturado;
	private float valorEstimado;
	private float distanciaEstimadaKM;
	@OneToOne
	@JoinColumn(name="idFacturaCliente")
	private Entity_FacturaCliente factura;
	@OneToMany(mappedBy="encomienda")
	private List<Entity_Remito> remitos;
	
	
	
	public Entity_Encomienda() {
		
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Entity_Sucursal getSucursalOrigen() {
		return sucursalOrigen;
	}
	public void setSucursalOrigen(Entity_Sucursal sucursalOrigen) {
		this.sucursalOrigen = sucursalOrigen;
	}
	public Entity_Destino getDestino() {
		return destino;
	}
	public void setDestino(Entity_Destino destino) {
		this.destino = destino;
	}
	public Entity_Sucursal getSucursalActual() {
		return sucursalActual;
	}
	public void setSucursalActual(Entity_Sucursal sucursalActual) {
		this.sucursalActual = sucursalActual;
	}
	public Date getFechaRecepcion() {
		return fechaRecepcion;
	}
	public void setFechaRecepcion(Date fechaRecepcion) {
		this.fechaRecepcion = fechaRecepcion;
	}
	public Date getFechaMaxima() {
		return fechaMaxima;
	}
	public void setFechaMaxima(Date fechaMaxima) {
		this.fechaMaxima = fechaMaxima;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	public Entity_Proveedor getAseguradora() {
		return aseguradora;
	}
	public void setAseguradora(Entity_Proveedor aseguradora) {
		this.aseguradora = aseguradora;
	}
	public float getLargo() {
		return largo;
	}
	public void setLargo(float largo) {
		this.largo = largo;
	}
	public float getAlto() {
		return alto;
	}
	public void setAlto(float alto) {
		this.alto = alto;
	}
	public float getAncho() {
		return ancho;
	}
	public void setAncho(float ancho) {
		this.ancho = ancho;
	}
	public float getPeso() {
		return peso;
	}
	public void setPeso(float peso) {
		this.peso = peso;
	}
	public float getVolumen() {
		return volumen;
	}
	public void setVolumen(float volumen) {
		this.volumen = volumen;
	}
	public String getTratamiento() {
		return tratamiento;
	}
	public void setTratamiento(String tratamiento) {
		this.tratamiento = tratamiento;
	}
	public boolean isApilable() {
		return apilable;
	}
	public void setApilable(boolean apilable) {
		this.apilable = apilable;
	}
	public int getCantApilable() {
		return cantApilable;
	}
	public void setCantApilable(int cantApilable) {
		this.cantApilable = cantApilable;
	}
	public boolean isRefrigerado() {
		return refrigerado;
	}
	public void setRefrigerado(boolean refrigerado) {
		this.refrigerado = refrigerado;
	}
	public String getCondicionTransporte() {
		return condicionTransporte;
	}
	public void setCondicionTransporte(String condicionTransporte) {
		this.condicionTransporte = condicionTransporte;
	}
	public String getIndicacionesManipulacion() {
		return indicacionesManipulacion;
	}
	public void setIndicacionesManipulacion(String indicacionesManipulacion) {
		this.indicacionesManipulacion = indicacionesManipulacion;
	}
	public String getFragilidad() {
		return fragilidad;
	}
	public void setFragilidad(String fragilidad) {
		this.fragilidad = fragilidad;
	}
	public boolean isTercerizado() {
		return tercerizado;
	}
	public void setTercerizado(boolean tercerizado) {
		this.tercerizado = tercerizado;
	}
	public float getKilometrosRecorridos() {
		return kilometrosRecorridos;
	}
	public void setKilometrosRecorridos(float kilometrosRecorridos) {
		this.kilometrosRecorridos = kilometrosRecorridos;
	}
	public boolean isFacturado() {
		return facturado;
	}
	public void setFacturado(boolean facturado) {
		this.facturado = facturado;
	}
	public float getValorEstimado() {
		return valorEstimado;
	}
	public void setValorEstimado(float valorEstimado) {
		this.valorEstimado = valorEstimado;
	}
	public float getDistanciaEstimadaKM() {
		return distanciaEstimadaKM;
	}
	public void setDistanciaEstimadaKM(float distanciaEstimadaKM) {
		this.distanciaEstimadaKM = distanciaEstimadaKM;
	}
	public Entity_FacturaCliente getFactura() {
		return factura;
	}
	public void setFactura(Entity_FacturaCliente factura) {
		this.factura = factura;
	}
	public List<Entity_Remito> getRemitos() {
		return remitos;
	}
	public void setRemitos(List<Entity_Remito> remitos) {
		this.remitos = remitos;
	}
	public DTO_Encomienda  toDTO(){
		DTO_Encomienda e = new DTO_Encomienda();

		e.setId(this.getId());
		e.setIdSucursalOrigen(this.getSucursalOrigen().getId());
		e.setIdDestino(this.getDestino().getId());
		e.setIdSucursalActual(this.getSucursalActual().getId());
		e.setFechaRecepcion(this.getFechaRecepcion());
		e.setFechaMaxima(this.getFechaMaxima());
		e.setEstado(this.getEstado());
		e.setIdAseguradora(this.getAseguradora().getId());
		e.setLargo(this.getLargo());
		e.setAlto(this.getAlto());
		e.setAncho(this.getAncho());
		e.setPeso(this.getPeso());
		e.setVolumen(this.getVolumen());
		e.setTratamiento(this.getTratamiento());
		e.setApilable(this.isApilable());
		e.setCantApilable(this.getCantApilable());
		e.setRefrigerado(this.isRefrigerado());
		e.setCondicionTransporte(this.getCondicionTransporte());
		e.setIndicacionesManipulacion(this.getIndicacionesManipulacion());
		e.setFragilidad(this.getFragilidad());
		e.setTercerizado(this.isTercerizado());
		e.setKilometrosRecorridos(this.getKilometrosRecorridos());
		e.setFacturado(this.isFacturado());
		e.setValorEstimado(this.getValorEstimado());
		e.setDistanciaEstimadaKM(this.getDistanciaEstimadaKM());
		e.setIdFacturaCliente(this.getFactura().getId());
		
		return e;
	}
}
